export const getInputs = () => [
	[
		[
			['5', '3', '.', '.', '7', '.', '.', '.', '.'],
			['6', '.', '.', '1', '9', '5', '.', '.', '.'],
			['.', '9', '8', '.', '.', '.', '.', '6', '.'],
			['8', '.', '.', '.', '6', '.', '.', '.', '3'],
			['4', '.', '.', '8', '.', '3', '.', '.', '1'],
			['7', '.', '.', '.', '2', '.', '.', '.', '6'],
			['.', '6', '.', '.', '.', '.', '2', '8', '.'],
			['.', '.', '.', '4', '1', '9', '.', '.', '5'],
			['.', '.', '.', '.', '8', '.', '.', '7', '9'],
		],
	],
	[
		[
			['8', '3', '.', '.', '7', '.', '.', '.', '.'],
			['6', '.', '.', '1', '9', '5', '.', '.', '.'],
			['.', '9', '8', '.', '.', '.', '.', '6', '.'],
			['8', '.', '.', '.', '6', '.', '.', '.', '3'],
			['4', '.', '.', '8', '.', '3', '.', '.', '1'],
			['7', '.', '.', '.', '2', '.', '.', '.', '6'],
			['.', '6', '.', '.', '.', '.', '2', '8', '.'],
			['.', '.', '.', '4', '1', '9', '.', '.', '5'],
			['.', '.', '.', '.', '8', '.', '.', '7', '9'],
		],
	],
];

/**
 * [**36. 有效的数独**](https://leetcode.cn/problems/valid-sudoku/)
 * 请你判断一个 `9 x 9` 的数独是否有效。只需要 **根据以下规则** ，验证已经填入的数字是否有效即可。
 * 数字 `1-9` 在每一行只能出现一次。
 * 数字 `1-9` 在每一列只能出现一次。
 * 数字 `1-9` 在每一个以粗实线分隔的 `3x3` 宫内只能出现一次。（请参考示例图）
 *
 * **注意：**
 * - 一个有效的数独（部分已被填充）不一定是可解的。
 * - 只需要根据以上规则，验证已经填入的数字是否有效即可。
 * - 空白格用 `'.'` 表示。
 *
 * ![](https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2021/04/12/250px-sudoku-by-l2g-20050714svg.png)
 *
 * @param board
 */
export default function (board: string[][]): boolean {
	if (
		!(function checkRows() {
			for (const row of board) {
				const map = new Map();
				for (const item of row) {
					if (item === '.') continue;
					if (map.has(item)) return false;
					map.set(item, true);
				}
			}
			return true;
		})()
	)
		return false;

	if (
		!(function checkCols() {
			for (let col = 0; col < 9; col++) {
				const map = new Map();
				for (let row = 0; row < 9; row++) {
					const item = board[row][col];
					if (item === '.') continue;
					if (map.has(item)) return false;
					map.set(item, true);
				}
			}
			return true;
		})()
	)
		return false;

	if (
		!(function checkBlocks() {
			for (let startX = 0; startX < 9; startX += 3) {
				for (let startY = 0; startY < 9; startY += 3) {
					const map = new Map();
					for (let x = 0; x < 3; x++) {
						for (let y = 0; y < 3; y++) {
							const item = board[x + startX][y + startY];
							if (item === '.') continue;
							if (map.has(item)) return false;
							map.set(item, true);
						}
					}
				}
			}

			return true;
		})()
	)
		return false;

	return true;
}
